Skip to content

20190809 灰度

灰度流程

  1. 确定涉及哪些后端、前端工程、gm_task 改动、定时脚本改动

    前端: ma station

    后端 WEB 服务: gm_service gm_web_stock gm_management gm_async_task gm_server_order

    后端 gm_task:

    1. 变更1

      1. 是否修改了 gm_task git 仓库中的代码或配置:否
      2. gm_task 脚本类型(新增脚本/修改已有脚本):修改已有脚本
    2. 是否修改了 gm_task git 仓库中的代码或配置:是

    3. gm_task 脚本类型(新增脚本/修改已有脚本):新增脚本
    4. batch_export_customer_list_path /data/www/manage/release/20190809/tools/celery_tasks/customerlist.py batch_edit_customer_path /data/www/manage/release/20190809/tools/celery_tasks/edit_customer_export.py batch_update_customer_path /data/www/manage/release/20190809/tools/celery_tasks/batch_update_customer.py batch_export_customer_finance_path /data/www/manage/release/20190809/tools/celery_tasks/customer_finance.py op_log_export_path /data/www/station/release/20190809/tools/celery_tasks/op_log_export.py sync_order_sku_price_new_path /data/www/station/release/20190809/tools/celery_tasks/async_order_sku_price_new.py batch_change_supplier_purchaser_path /data/www/stock/release/20190809/tools/celery_tasks/batch_change_supplier_purchaser.py inventory_template_export_path /data/script/gm_script/feature/small_demand/tools/celery_tasks/inventory_template_export.py

    后端 gm_script feature/small_demand 分支 a2236a5f5759f8c23f3e6e266b514ea9e2003936

  2. 从 develop 分支中切出 release/YYYYMMDD 分支

  3. 灰度一个不存在的 group id
  4. 部署 gm_task
  5. clone 新的 gm_task 分支 done
  6. 部署 web 服务分支 done
  7. 修改 gm_task 分支配置 done
  8. 修改 gm_task 队列配置(gm_task_queue) done
  9. 使用 tmux 启动服务 done
  10. 修改 web 服务的配置,改动 queue_name
  11. 部署 gm_script
  12. 灰度账号(先灰度测试账号,再灰度真实客户)
  13. 刷数据(切流量前需要刷的脚本)
  14. 修改 gm_task 脚本中的 group ids
  15. 修改 gm_script 脚本中的 group ids
  16. 使用发布脚本灰度账号
  17. 刷数据(切流量后需要刷的脚本)
  18. 等待测试测试(仅灰度测试账号时需要)
  19. 在钉钉群里通知

全量流程

  1. 查看之前灰度的ID

    gmdeploy list -p 模块名称 gmdeploy prerelease -u name ID # 在全量机器部署分支服务,

  2. 合 master 代码

    到所有模块git目录里面, 将所有模块master内容合并到release分支

    git checkout master
    git pull
    git checkout release/20190715
    git merge master
    git push
    

    回到脚本中yes确认完成

  3. 跟前端确认分支是否要进行rebase到master,等他们操作完成

    确认是否要执行刷数据脚本(刷全部用户数据,跟后端)

    gmdeploy release -u name ID         #将用户流量全部切换到分支服务上
    
    切换到master分支             meger到master
    git pull
    git merge 分支名称
    git push
    
    切换到develop分支                meger到develop分支
    git checkout develop
    git pull
    git merge master
    git push
    

    yes 确认完成操作

  4. 刷数据(切流量前需要刷的脚本)

  5. 修改 gm_task 脚本中的 group ids
  6. 修改 gm_script 脚本中的 group ids
  7. gmdeploy release
  8. 刷数据(切流量后需要刷的脚本)
  9. 通知前端全量更新代码 #发布全量操作
  10. gmdeploy complete -u name ID #等前端操作完成之后,软链接到模板工程里面
  11. 到trello将模块拖到己全量看板

-----------------


# 需求发布规范

每周一三五下午四点前合好代码,在 trello 中按照下面的模版填写发布单

## 需求发布单模版 V1

### 涉及Web后端工程

提供 Web 服务的工程的服务。这类工程都有 develop 分支,**Reviewer** 需要使用 GitLab 中把代码合到 develop 分支。

由于 Reviewer 一般事情比较繁忙,可能忘记了合代码。**Developer** 需要自行确定代码是否合并到了 develop 分支,由 Developer(而不是 Reviewer)对代码未合并造成的事故负责。

这里只需要写工程名,不需要填写分支。

### 涉及前端工程

提供前端工程的工程名。由前端对代码的合并负责。

### 修改到的功能

(包括但不限于:订单、支付、分拣、配送、采购、进销存、商品库)

### 刷数据脚本

刷数据脚本是在灰度以及全量的时候需要执行的脚本,用于批量修改数据。

每一个脚本需要提供以下信息:

1. 脚本所在工程:
2. 脚本的相对路径:
3. 脚本的使用方式:
4. 在切流量前还是切流量后运行脚本:
5. 脚本是否可以重复刷某一个 Group:
6. 其他注意事项

### gm_task 改动

gm_task 里包含了所有 celey 的脚本

1. 是否修改了 gm_task git 仓库中的代码或配置:
2. gm_task 脚本类型(新增脚本/修改已有脚本):
3. 脚本在 gm_task 中配置的名字:
4. 脚本路径
5. 如果是修改已有脚本,是否需要从全量的脚本中剔除灰度的客户

### gm_script 改动

gm_script 中的脚本使用 crontab 定时调用

1. 定时脚本类型(新增脚本/修改已有脚本):
2. 如果是修改已有脚本,是否需要从全量的脚本中剔除灰度的客户:
3. 如果是新增脚本,crontab 命令是什么:

### 其他需要执行的修改

------

例子:

需求发布单模版 V1

涉及Web后端工程

gm_service, gm_web_stock, gm_server_order

涉及前端工程

station, mes

修改到的功能

订单和支付

刷数据脚本

  1. 脚本所在工程 gm_service
  2. 脚本的相对路径 tools/tmp/abcdefg.py
  3. 脚本的使用方式: python3 ./tools/tmp/abcdefg.py -g 111,222,333 # 刷部分groups python3 ./tools/tmp/abcdefg.py --all # 刷所有客户
  4. 在切流量前还是切流量后运行脚本:切流量后执行
  5. 脚本是否可以重复刷某一个 Group:可以
  6. 其他注意事项:无

  7. 脚本所在工程:order

  8. 脚本的相对路径:tool/xyz.py
  9. 脚本的使用方式: 修改脚本文件中的 GROUP_IDS 变量,然后执行脚本。
  10. 在切流量前还是切流量后运行脚本:都要
  11. 脚本是否可以重复刷某一个 Group:可以
  12. 其他注意事项:这个脚本 可能会运行数个小时,最好提前半天运行脚本。

gm_task 改动

  1. 是否修改了 gm_task git 仓库中的代码或配置:是
  2. gm_task 脚本类型(新增脚本/修改已有脚本):新增脚本
  3. 脚本在 gm_task 中配置的名字:export_purchase_analyse_path
  4. 脚本路径:/data/www/stock/gm_web_stock/tools/celery_tasks/export_purchase_analyse.py
  5. 如果是修改已有脚本,是否需要从全量的脚本中剔除灰度的客户:需要

  6. 是否修改了 gm_task git 仓库中的代码或配置:否

  7. gm_task 脚本类型(新增脚本/修改已有脚本):修改已有脚本
  8. 脚本在 gm_task 中配置的名字:export_inner_transfer_log_path
  9. 脚本路径:/data/www/stock/gm_web_stock/tools/celery_tasks/export_inner_transfer_log.py
  10. 如果是修改已有脚本,是否需要从全量的脚本中剔除灰度的客户:需要

gm_script 改动

其他需要执行的修改

  1. 添加了新的日志目录,部署station和manage的机器上需有 /data/logs/celery_task/ 目录的存在. 否则station和manage会启动失败
  2. 为了解决 gm_task 线程变量中没有group_id导致灰度请求无法准确通过rmiclient准确请求灰度接口的情况, 在gm_task中写死了 group_id为 909090, 必须灰度该id